package dp;

/**
 * @author songZiHao
 * @version 1.0.0
 * @ClassName 第N个泰波那契数1137.java
 * @Description https://leetcode-cn.com/problems/n-th-tribonacci-number/
 * @createTime 2021年12月06日 20:44:00
 */
public class 第N个泰波那契数1137 {
	public int tribonacci(int n) {
		if (n == 0) {
			return 0;
		}
		if (n < 3) {
			return 1;
		}
		int a = 0, b = 1, c = 1, d = 2;
		for (int i = 3; i <= n; i++) {
			a = b;
			b = c;
			c = d;
			d = a + b + c;
		}
		return c;
	}

	public int tribonacci2(int n) {
		if (n == 0) {
			return 0;
		}
		if (n < 3) {
			return 1;
		}
		/**
		 * 定义备忘录 dp[i]表示i位置的值
		 */
		int[] dp=new int[n+1];

		//初始化状态
		dp[0]=0;
		dp[1]=1;
		dp[2]=1;

		/**
		 * 状态转移
		 */
		for (int i = 3; i <= n; i++) {
			dp[i]=dp[i-3]+dp[i-2]+dp[i-1];
		}
		return dp[n];
	}
}
